#include "Controlador.h"
#include "ControlMouseExterno.h"
#include "ControladorMouseCabina.h"


Controlador::Controlador(Escena* escena)
	{
	this->controladorMouse = new ControlMouseExterno(escena);
	this->escena = escena;
	}


Controlador::~Controlador(void)
	{
	delete this->controladorMouse;
	}

Escena* Controlador::getEscena() const
	{
	return this->escena;
	}

void Controlador::onKeyboardEvent(unsigned char key, int x, int y)
	{
	switch (key)
		{
		case 'q':
			exit(0);
			break;
		case 'c':
			{
			if (!this->escena->isCamaraEnCabina()){
				this->escena->ponerCamaraEnCabina();
				delete this->controladorMouse;
				this->controladorMouse = new ControladorMouseCabina(this->escena);
			} else {
				this->escena->sacarCamaraDeCabina();
				delete this->controladorMouse;
				this->controladorMouse = new ControlMouseExterno(this->escena);
			}
			
			glutPostRedisplay();
			}
			break;
		case 'a':
			{
			RuedaPrincipal * rppal = this->escena->getRuedaPrincipal();
			int velActual = rppal->getVelAngular();
			velActual += 10;
			rppal->setVelAngular(velActual);
			velActual = -2*velActual;
			for (int i = 0; i < 3; i++)
				{
				RuedaSecundaria * rsec = this->escena->getRuedaPrincipal()->getRuedaSecundaria(i);
				rsec->setVelAngular(velActual);
				}
			glutPostRedisplay();
			}
			break;
		case 's':
			{
			RuedaPrincipal * rppal = this->escena->getRuedaPrincipal();
			int velActual = rppal->getVelAngular();
			velActual -= 10;
			rppal->setVelAngular(velActual);
			velActual = -2*velActual;
			for (int i = 0; i < 3; i++)
				{
				RuedaSecundaria * rsec = this->escena->getRuedaPrincipal()->getRuedaSecundaria(i);
				rsec->setVelAngular(velActual);
				}
			glutPostRedisplay();
			}
			break;
		default:
			break;
		}
	}

void Controlador::onPassiveMotion(int x, int y)
	{
	this->controladorMouse->onPassiveMotion(x,y);
	}

void Controlador::onMotion(int x, int y)
	{
	this->controladorMouse->onMotion(x,y);
	}

void Controlador::onButtonClick(int button, int state, int x, int y)
	{
	this->controladorMouse->onButtonClick(button,state,x,y);
	}

void Controlador::display()
	{
	glDisable(GL_LIGHTING);
	this->escena->dibujar(this->escena->getTiempoDurEscena());
	glEnable(GL_LIGHTING);
	}